#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <pthread.h> 
#include <time.h>
#include "Fourmi.h"


// Méthode exécutée par les threads fourmis
void* run(void* arg);

// Définition du constructeur
Fourmi :: Fourmi(Fourmilliere* _fm)
{
	srand(time(NULL));

	fm = _fm;
	jours_ecoules = 0;
	jours_vie = 25 + rand()%10;

	pthread_create(&t, NULL, run, this);
}
void Fourmi :: nee(){}
void Fourmi :: travaille(){}
void Fourmi :: dort()
{
	usleep(fm->RAPPORT_SECONDE_JOUR * 1000 * 1000);
}
void Fourmi :: mange()
{
	if(fm->GetNourriture() <= 0)
	{
		int NbJours = fm->GetNbJoursFamine();
		if(NbJours > fm->NB_JOURS_MAX_FAMINE)
			NbJours = fm->NB_JOURS_MAX_FAMINE;

		// Pourcentage de chance de mourir en fonction du nombre de jours de famine
		if(rand()%(fm->NB_JOURS_MAX_FAMINE - NbJours + 1) == 0)
			 jours_ecoules = jours_vie;
	}
	else
		fm->AddNourriture(-1);
}
void Fourmi :: meurt(){}

void* run(void* arg)
{
	// Attente de la fin du constructeur des classes filles
	sleep(1);

	Fourmi* f = (Fourmi*)arg;

	if(f->fm != NULL)
	{
		f->nee();

		// Tant que la fourmi vit
		while(f->jours_vie >= f->jours_ecoules)
		{	
			f->mange();
			f->travaille();
			f->dort();
			f->jours_ecoules++;
		}
	}
	
	f->meurt();
	return NULL;
}


